/*
*       ID : pallab81
*       PROG : 443
*       LANG : C++
*       2012-08-30-11.39.02 Thursday
*
*       "I have not failed, I have just found 10000 ways that won't work.
*/

#include <iostream>
#include <algorithm>
#include <vector>
#include <sstream>
#include <fstream>
#include <string>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <functional>
#include <bitset>
#include <iomanip>

#include <ctime>
#include <cassert>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <climits>
#include <cstring>
#include <cstdlib>

using namespace std;


#define foR(i1,st,ed) for(int i1 = st , j1 = ed ; i1 < j1 ; ++i1 )
#define fo(i1,ed) foR( i1 , 0 , ed )
#define foE(i1,st,ed) foR( i1, st, ed+1 )
#define foit(i, x) for (typeof((x).begin()) i = (x).begin(); i != (x).end(); i++)
#define bip system("pause")
#define Int long long
#define pb push_back
#define SZ(X) (int)(X).size()
#define LN(X) (int)(X).length()
#define mk make_pair
#define SET( ARRAY , VALUE ) memset( ARRAY , VALUE , sizeof(ARRAY) )
template<class T1>
inline void debug(T1 _x) {
    cout<<_x<<'\n';
}
template<class T1, class T2>
inline void debug(T1 _x,T2 _y) {
    cout<<_x<<' '<<_y<<'\n';
}
template<class T1, class T2, class T3>
inline void debug(T1 _x,T2 _y,T3 _z) {
    cout<<_x<<' '<<_y<<' '<<_z<<'\n';
}
template<class T1, class T2, class T3, class T4>
inline void debug(T1 _x,T2 _y,T3 _z,T4 _zz) {
    cout<<_x<<' '<<_y<<' '<<_z<<' '<<_zz<<'\n';
}
template< class T1>
inline void debug(T1 _array,int _size) {
    cout<<"[";
    for (int i=0; i<_size; ++i) {
        cout<<' '<<_array[i];
    }
    puts(" ]");
}
inline bool CI(int &_x) {
    return scanf("%d",&_x)==1;
}
inline bool CI(int &_x, int &_y) {
    return CI(_x)&&CI(_y) ;
}
inline bool CI(int &_x, int &_y, int &_z) {
    return CI(_x)&&CI(_y)&&CI(_z) ;
}
inline bool CI(int &_x, int &_y, int &_z, int &_zz) {
    return CI(_x)&&CI(_y)&&CI(_z)&&CI(_zz) ;
}
inline void wait( double seconds ) {
    double endtime = clock()+( seconds* CLOCKS_PER_SEC );
    while( clock() < endtime ) {
        ;
    }
}
#define line putchar_unlocked('\n');

#define getchar getchar_unlocked
#define putchar putchar_unlocked

inline void fastRead(int *a) {
    register char c=0;
    while (c<33) c=getchar();
    *a=0;
    while (c>33) {
        *a=*a*10+c-'0';
        c=getchar();
    }
}
inline void fastOut(int a) {
    if(a) {
        int v=a%10;
        fastOut(a/10);
        putchar_unlocked( (char)(v+'0') );
    }

}
inline void myOut(int a) {
    if(a==0) {
        putchar_unlocked('0');
    } else {
        fastOut(a);
    }

}
#if !defined( ONLINE_JUDGE )
#define debug
#endif
int number;
map<Int, int > mp;
const int mxn = 5842;
const Int mxnnum = 2000000000LL;
Int memo[5842+5];
inline Int fun(Int x, Int y) {
    Int res= (Int)1;
    for ( ; y ; ) {
        if ( (y&1) ) {
            res*= x;
        }
        x*=x;
        y>>=1;
    }
    return res;
}
void go(int n2, int n3, int n5, int n7) {
    Int num = fun(2LL,n2) * fun(3LL,n3) *fun(5LL,n5) * fun( 7LL,n7 );
    if( SZ(mp) > mxn || mp.count(num) || num > mxnnum )return ;
    mp[ num ]=1;
    //cout<<"Now number => "<<num<<'\n';
    //wait(.5);
    go(n2+1, n3,n5,n7);
    go(n2, n3+1, n5, n7);
    go(n2, n3, n5+1, n7);
    go(n2, n3, n5, n7+1);
}
char buff[50];
inline void show_result(int indx) {
    if( indx%100 ==11 || indx%100 ==12 || indx%100 ==13 ) {
        sprintf(buff,"The %dth humble number is %lld.",indx,memo[indx]);
    } else if( indx%10 == 1 ) {
        sprintf(buff,"The %dst humble number is %lld.",indx,memo[indx]);
    } else if( indx%10 == 2 ) {
        sprintf(buff,"The %dnd humble number is %lld.",indx,memo[indx]);
    } else if( indx%10 == 3 ) {
        sprintf(buff,"The %drd humble number is %lld.",indx,memo[indx]);
    } else {
        sprintf(buff,"The %dth humble number is %lld.",indx,memo[indx]);
    }
    puts(buff);
}
int main() {
    go(0,0,0,0);
    int cnt=0;
    foit(it,mp) {
        memo[++cnt] =it->first;
    }

#if !defined( ONLINE_JUDGE )
    freopen("in","r",stdin);
#endif
    while( true ) {
        fastRead( &number);
        if( number==0 )break;
        show_result(number);
    }

    return 0;
}
